查看原文
其他

3.8K Star,旷视开源的深度学习底层框架

FOSS Lab 2022-05-25
点击蓝字默默关注

整理 | 叶子


一、软件介绍


MegEngine(天元)是一个快速,可扩展,易于使用且支持自动求导的深度学习框架,中文名为“天元”,是旷视 AI 战略的重要组成部分,负责 AI 三要素(算法,算力,数据)中的“算法”。


二、项目地址


https://github.com/MegEngine/MegEngine


三、特点


一是“训练推理一体”。MegEngine 支持多种硬件平台( CPU,GPU,ARM )。不同硬件上的推理框架和 MegEngine 的训练框架无缝衔接。部署时无需做额外的模型转换,速度/精度和训练保持一致,有效解决了 AI 落地中“部署环境和训练环境不同,部署难”的问题。

二是“动静合一”。动态图易调试,静态图好部署。鱼和熊掌如何兼得,是现代深度学习框架的核心诉求。MegEngine 在静态图的基础上,逐渐加入支持完整动态图的功能。在动态模式下加速研发过程,无需改变模型代码一键切换至静态模式下的部署,为科研和算法工程师同时提供便利。

三是“兼容并包”。MegEngine 的顶层 API 基于 Python,采取了类似于 PyTorch 的风格。简单直接,易于上手,便于现有项目进行移植或整合。为更好地帮助学习实践,MegEngine 同时提供了“开箱即用”的在线深度学习工具 MegStudio ,和汇聚了顶尖算法和模型的预训练模型集合 Model Hub 。

四是“灵活高效”。MegEngine 底层的高性能算子库对于不同的硬件架构进行了深度适配和优化,并提供高效的亚线性内存优化策略,对于生产环境繁多的计算设备提供了极致的性能保证。高效易用的分布式训练实现能有效支持富有弹性的大规模训练。


四、安装


注意: MegEngine 现在仅支持 Linux 平台安装,以及 Python3.5 及以上的版本(不支持 Python2 )。对于 Windows 10 用户,可以通过安装 WSL(Windows Subsystem for Linux) 进行体验。


通过包管理器安装


通过 pip 安装的命令如下:

pip3 install megengine -f https://megengine.org.cn/whl/mge.html


通过源码编译安装


环境依赖

大多数编译 MegEngine 的依赖位于 third_party 目录,可以通过以下命令自动安装:

$ ./third_party/prepare.sh
$ ./third_party/install-mkl.sh

是有一些依赖需要手动安装:

  • CUDA(>=10.1), cuDNN(>=7.6) ,如果需要编译支持 CUDA 的版本(默认开启)

  • TensorRT(>=5.1.5) ,如果需要编译支持 TensorRT 的版本(默认开启)

  • LLVM/Clang(>=6.0) ,如果需要编译支持 Halide JIT 的版本(默认开启)

  • Python(>=3.5), Numpy, SWIG(>=3.0) ,如果需要编译生成 Python 模块(默认开启)

开始编译

MegEngine 遵循“源外构建”(Out-of-Source Build)原则,并且使用静态编译方式。编译的具体流程如下:

1、创建用于编译的目录

mkdir -p build
cd build

2、使用 CMake 生成编译配置:

生成支持 CUDA 环境的配置:

cmake .. -DMGE_WITH_TEST=ON

生成仅支持 CPU 环境的配置,使用 -DMGE_WITH_CUDA=OFF 选项:

cmake .. -DMGE_WITH_CUDA=OFF -DMGE_WITH_TEST=ON

生成仅用于 C++ 环境部署的配置,使用 -DMGE_INFERENCE_ONLY=ON ,并可用 -DMGE_WITH_TEST=OFF 关闭测试:

cmake .. -DMGE_INFERENCE_ONLY=ON -DMGE_WITH_TEST=OFF

可以使用 -DCMAKE_INSTALL_PREFIX=YOUR_PATH 指定具体安装目录。

  1. 开始编译:

    make -j$(nproc)
  2. [可选] 如果需要用于部署,可以安装 MegEngine 的 C++ 库:

    make install

以下是其它常用编译选项:

  • MGE_ARCH 指定编译的目标平台(默认自动检测当前平台)

  • MGE_WITH_DISTRIBUTED 是否开启多机分布式支持(默认开启)

  • MGE_WITH_PYTHON_MODULE 是否编译生成 Python 模块(默认开启)

  • MGE_BLAS 选择 BLAS 的后端实现,可以是 MKL 或 OpenBLAS (默认 MKL

  • MGE_CUDA_GENCODE 指定提供给 nvcc 的 -gencode 选项(默认不指定)

  • MGE_DISABLE_FLOAT16 是否不提供 float16 类型支持(默认关闭)

  • MGE_ENABLE_EXCEPTIONS 是否开启 C++ 报错支持(默认开启)

  • MGE_ENABLE_LOGGING 是否开启 MegEngine 日志信息(默认自动检测)

更多选项可以通过以下命令查看:

cd build
cmake -LAH .. 2>/dev/null| grep -B 1 'MGE_' | less

参考资料:

https://my.oschina.net/u/2306127/blog/4410032




往期推荐

Nimporter:导入时将Nim编译为Python模块

2021-03-30

一个针对容器化工作负载的Linux发行版,安全可伸缩

2021-03-29

7.6K Star的开源神器:一个二维码,让文件传输不设限!

2021-03-26


扫码关注最新动态

公众号ID:fosslab

我就知道你“在看”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存